/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.inve.manager;

import com.brain.come.dto.DocumentoVentaDetaDto;
import com.brain.come.dto.DocumentoVentaDto;
import com.brain.come.dto.PedidoVentaDetaDto;
import com.brain.come.dto.PedidoVentaDto;
import com.brain.come.manager.DocumentoVentaDetaManager;
import com.brain.come.manager.PedidoVentaDetaManager;
import com.brain.come.view.util.ConstantesCome;
import com.brain.comp.dto.DocumentoCompraDetaDto;
import com.brain.comp.dto.DocumentoCompraDto;
import com.brain.comp.dto.PedidoCompraDetaDto;
import com.brain.comp.manager.*;
import com.brain.comp.dto.PedidoCompraDto;
import com.brain.comp.view.util.ConstantesComp;
import com.brain.conf.dto.AlmacenDto;
import com.brain.conf.dto.AlmacenUbicacionDto;
import com.brain.conf.manager.*;
import com.brain.conf.view.util.ConstantesConf;
import com.brain.core.common.ExportarExcelInve;
import com.brain.core.manager.*;
import com.brain.core.common.UtilCore;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.exception.DAOException;
import com.brain.core.hibernate.dao.DAOGenerico;
import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.SessionMBean;
import com.brain.core.view.util.ConstantesCore;
import com.brain.inve.dto.GuiaRemisionDetaDto;
import com.brain.inve.dto.GuiaRemisionDto;
import com.brain.inve.dto.GrDetaItemDto;
import com.brain.inve.dto.StockDto;
import com.brain.inve.view.util.ConstantesInve;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.model.SelectItem;
import net.sf.jasperreports.engine.JRException;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

/**
 *
 * @author Indra
 */
@Service
public class GuiaRemisionManager extends ComunManager<GuiaRemisionDto> implements Serializable {

    private static Logger logger = Logger.getLogger(GuiaRemisionManager.class);
    private Long idEntidad = 186L;
    private Long idCatalogoMotivosSinOrigen = 356L;
    private Long idCatalogoMotivosConOrigen = 355L;
    private Long idCatalogoMotivosTranfEntreAlm = 402L;
    private Long idParametroPC = 505L;
    private Long idParametroPV = 506L;
    private Long idParametroDC = 507L;
    private Long idParametroDV = 508L;
    @Resource
    private DAOGenerico<GuiaRemisionDto> springHibernateDao;
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private ApplicationMBean applicationMBean;
    @Resource
    private AlmacenUbicacionManager auManager;
    private final String urlIngreso = "/pages/inve/guiaRemision/guiaRemisionIngreso.xhtml";
    private final String urlSalida = "/pages/inve/guiaRemision/guiaRemisionSalida.xhtml";
    private final String urlLista = "/pages/inve/guiaRemision/listaGuiasRemision.xhtml";
    private final String urlIntercambio = "/pages/inve/guiaRemision/intercambio.xhtml";
    private final String urlListaIntercambio = "/pages/inve/guiaRemision/listaIntercambios.xhtml";

    /**
     * obtener Guia de Remision por Id
     *
     * @param id
     * @return Guia de Remision
     * @throws DAOException
     */
    public GuiaRemisionDto obtenerPorId(Long id) throws DAOException {
        return springHibernateDao.obtenerDtoPorId(GuiaRemisionDto.class, id);
    }

    /**
     * Metodo para inicializar nueva Guia de Remision
     *
     * @return
     */
    public GuiaRemisionDto inicializarIngreso() {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        GuiaRemisionDto dto = new GuiaRemisionDto();
        AlmacenDto almDto = obtenerAlmacenPorDefault();
        dto.setEmpresaDto(sessionMBean.getEmpresaDto());
        dto.setFechaEmision(UtilCore.Fecha.obtenerFechaActualDate());
        dto.setProviene(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA);
        dto.setEstado(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ELABORACION);
        dto.setTipo(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_ING);
        dto.setAlmacenDestinoDto(almDto);
        dto.setDireccionAlmacenDestino(almDto.getDireccion());
        if (sessionMBean.getOrganizacionDto() != null) {
            if (sessionMBean.getOrganizacionDto().getId() != null) {
                dto.setOrganizacionDto(sessionMBean.getOrganizacionDto());
                dto.setRazonSocialDestinatario(sessionMBean.getOrganizacionDto().getDescripcion());
                dto.setRucDestinatario(sessionMBean.getOrganizacionDto().getRuc());
                dto.setDireccionDestinatario(almDto.getDireccion());
            }
        }
        dto.setListaDetalles(new ArrayList<GuiaRemisionDetaDto>());
        return dto;
    }

    public GuiaRemisionDto inicializarSalida() {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        GuiaRemisionDto dto = new GuiaRemisionDto();
        AlmacenDto almDto = obtenerAlmacenPorDefault();
        dto.setEmpresaDto(sessionMBean.getEmpresaDto());
        dto.setFechaEmision(UtilCore.Fecha.obtenerFechaActualDate());
        dto.setProviene(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA);
        dto.setEstado(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ELABORACION);
        dto.setTipo(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL);
        dto.setAlmacenOrigenDto(almDto);
        dto.setDireccionAlmacenOrigen(almDto.getDireccion());
        if (sessionMBean.getOrganizacionDto() != null) {
            if (sessionMBean.getOrganizacionDto().getId() != null) {
                dto.setOrganizacionDto(sessionMBean.getOrganizacionDto());
                dto.setRazonSocialRemitente(sessionMBean.getOrganizacionDto().getDescripcion());
                dto.setRucRemitente(sessionMBean.getOrganizacionDto().getRuc());
                dto.setDireccionRemitente(almDto.getDireccion());
            }
        }
        dto.setListaDetalles(new ArrayList<GuiaRemisionDetaDto>());
        return dto;
    }

    public GuiaRemisionDto inicializarIntercambio() {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        GuiaRemisionDto dto = new GuiaRemisionDto();
        AlmacenDto almDto = obtenerAlmacenPorDefault();
        dto.setFlagGuia(Boolean.TRUE);
        dto.setEmpresaDto(sessionMBean.getEmpresaDto());
        dto.setFechaEmision(UtilCore.Fecha.obtenerFechaActualDate());
        dto.setTipo(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV);
        dto.setEstado(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_COD_ESTADO_ELABORACION);
        dto.setProviene(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA);
        dto.setAlmacenDestinoDto(almDto);
        dto.setAlmacenOrigenDto(almDto);
        dto.setDireccionAlmacenDestino(almDto.getDireccion());
        dto.setDireccionAlmacenOrigen(almDto.getDireccion());
        if (sessionMBean.getOrganizacionDto() != null) {
            if (sessionMBean.getOrganizacionDto().getId() != null) {
                dto.setOrganizacionDto(sessionMBean.getOrganizacionDto());
            }
        }
        dto.setListaDetalles(new ArrayList<GuiaRemisionDetaDto>());
        return dto;
    }

    public void inicializarDtoIntercambio(GuiaRemisionDto dto) {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        dto.setRucDestinatario(sessionMBean.getOrganizacionDto().getRuc());
        dto.setRazonSocialDestinatario(sessionMBean.getOrganizacionDto().getNombre());
        dto.setDireccionDestinatario(sessionMBean.getOrganizacionDto().getDireccion());
        dto.setRucRemitente(sessionMBean.getOrganizacionDto().getRuc());
        dto.setRazonSocialRemitente(sessionMBean.getOrganizacionDto().getNombre());
        dto.setDireccionRemitente(sessionMBean.getOrganizacionDto().getDireccion());
    }

    /**
     * Metodo para obtener Guia Remision segun filtro
     *
     * @param dtoFiltro
     * @return Lista de Guia Remision
     * @throws DAOException
     */
    public List<GuiaRemisionDto> obtener(GuiaRemisionDto dtoFiltro) throws DAOException {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        String hqsql = "select e from GuiaRemisionDto as e where e.id=e.id ";
        List<Object> listaParametros = new ArrayList<Object>();

        if (dtoFiltro.getId() != null && !dtoFiltro.getId().equals(0L)) {
            hqsql += " and e.id = ?";
            listaParametros.add(dtoFiltro.getId());
        }

        if (dtoFiltro.getTipo() != ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_TODOS) {
            hqsql += " and e.tipo = ?";
            listaParametros.add(dtoFiltro.getTipo());
        }

        if (dtoFiltro.getNroSerie() != null && dtoFiltro.getNroSerie().length() != 0) {
            hqsql += " and upper(e.nroSerie) like '%" + dtoFiltro.getNroSerie().toUpperCase() + "%'";
        }

        if (dtoFiltro.getDescripcion() != null && dtoFiltro.getDescripcion().length() != 0) {
            hqsql += " and upper(e.descripcion) like '%" + dtoFiltro.getDescripcion().toUpperCase() + "%'";
        }

        if (dtoFiltro.getNroReferencia() != null && dtoFiltro.getNroReferencia().length() != 0) {
            hqsql += " and upper(e.nroReferencia) like '%" + dtoFiltro.getNroReferencia().toUpperCase() + "%'";
        }

        if (dtoFiltro.getEstado() != null && dtoFiltro.getEstado().length() != 0 && !dtoFiltro.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_TODOS)) {
            hqsql += " and upper(e.estado) = '" + dtoFiltro.getEstado() + "'";
        }

        if (dtoFiltro.getFlagGuiaFiltro() != null && dtoFiltro.getFlagGuiaFiltro().length() != 0 && !dtoFiltro.getFlagGuiaFiltro().equals("T")) {
            hqsql += " and flagGuia = ?";
            if (dtoFiltro.getFlagGuiaFiltro().equals("C")) {
                listaParametros.add(Boolean.TRUE);
            } else if (dtoFiltro.getFlagGuiaFiltro().equals("S")) {
                listaParametros.add(Boolean.FALSE);
            }
        }

        if (dtoFiltro.getDescAlmacen() != null && dtoFiltro.getDescAlmacen().length() != 0) {
            hqsql += " and (upper(e.almacenOrigenDto.nombre) like '%" + dtoFiltro.getDescAlmacen().toUpperCase() + "%'";
            hqsql += " or upper(e.almacenDestinoDto.nombre) like '%" + dtoFiltro.getDescAlmacen().toUpperCase() + "%')";
        }

        if (dtoFiltro.getIdProducto() != null && !dtoFiltro.getIdProducto().equals(0L)) {
            hqsql += " and exists (select 'X' from GuiaRemisionDetaDto as d where d.guiaRemisionDto.id = e.id and d.productoDto.id = ? )";
            listaParametros.add(dtoFiltro.getIdProducto());
        }

        if (dtoFiltro.getDescProducto() != null && dtoFiltro.getDescProducto().length() != 0) {
            hqsql += " and exists (select 'X' from GuiaRemisionDetaDto as d where d.guiaRemisionDto.id = e.id and (upper(d.productoDetaDto.productoDto.descripcion) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDetaDto.sku) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDetaDto.productoDto.descripcionCorta) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDetaDto.productoDto.descripcionDetalle) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDetaDto.productoDto.descripcionIdioma1) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDetaDto.productoDto.descripcionIdioma2) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += "))";
        }

        if (dtoFiltro.getFechaInicio() != null && dtoFiltro.getFechaFin() != null) {
            hqsql += " and e.fechaEmision between ? and ?";
            Calendar c = Calendar.getInstance();
            c.setTime(dtoFiltro.getFechaInicio());
            c.set(Calendar.HOUR, 0);
            c.set(Calendar.MINUTE, 0);
            c.set(Calendar.SECOND, 0);
            listaParametros.add(c.getTime());
            c.setTime(dtoFiltro.getFechaFin());
            c.set(Calendar.HOUR, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            listaParametros.add(c.getTime());
        }


        if (dtoFiltro.getFechaTrasladoInicio() != null && dtoFiltro.getFechaTrasladoFin() != null) {
            hqsql += " and e.fechaInicioTraslado between ? and ?";
            Calendar c = Calendar.getInstance();
            c.setTime(dtoFiltro.getFechaTrasladoInicio());
            c.set(Calendar.HOUR, 0);
            c.set(Calendar.MINUTE, 0);
            c.set(Calendar.SECOND, 0);
            listaParametros.add(c.getTime());
            c.setTime(dtoFiltro.getFechaTrasladoFin());
            c.set(Calendar.HOUR, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            listaParametros.add(c.getTime());
        }

        if (dtoFiltro.getFechaContableInicio() != null && dtoFiltro.getFechaContableFin() != null) {
            hqsql += " and e.fechaContable between ? and ?";
            Calendar c = Calendar.getInstance();
            c.setTime(dtoFiltro.getFechaContableInicio());
            c.set(Calendar.HOUR, 0);
            c.set(Calendar.MINUTE, 0);
            c.set(Calendar.SECOND, 0);
            listaParametros.add(c.getTime());
            c.setTime(dtoFiltro.getFechaContableFin());
            c.set(Calendar.HOUR, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            listaParametros.add(c.getTime());
        }

        if (dtoFiltro.getDescDestinatario() != null && dtoFiltro.getDescDestinatario().length() != 0) {
            hqsql += " and (upper(e.rucDestinatario) like '%" + dtoFiltro.getDescDestinatario().toUpperCase() + "%'";
            hqsql += " or upper(e.razonSocialDestinatario) like '%" + dtoFiltro.getDescDestinatario().toUpperCase() + "%'";
            hqsql += " or upper(e.direccionDestinatario) like '%" + dtoFiltro.getDescDestinatario().toUpperCase() + "%')";
        }

        if (dtoFiltro.getDescRemitente() != null && dtoFiltro.getDescRemitente().length() != 0) {
            hqsql += " and (upper(e.rucRemitente) like '%" + dtoFiltro.getDescRemitente().toUpperCase() + "%'";
            hqsql += " or upper(e.razonSocialRemitente) like '%" + dtoFiltro.getDescRemitente().toUpperCase() + "%'";
            hqsql += " or upper(e.direccionRemitente) like '%" + dtoFiltro.getDescRemitente().toUpperCase() + "%')";
        }

        if (dtoFiltro.getIdOrigen() != null && !dtoFiltro.getIdOrigen().equals(0L)) {
            hqsql += " and ( e.pedidoCompraDto.id = ? ";
            listaParametros.add(dtoFiltro.getIdOrigen());
            hqsql += " or e.pedidoVentaDto.id = ?";
            listaParametros.add(dtoFiltro.getIdOrigen());
            hqsql += " or e.documentoCompraDto.id = ?";
            listaParametros.add(dtoFiltro.getIdOrigen());
            hqsql += " or e.documentoVentaDto.id = ?";
            listaParametros.add(dtoFiltro.getIdOrigen());
            hqsql += ")";
        }

        if (dtoFiltro.getNroSerieOrigen() != null && dtoFiltro.getNroSerieOrigen().length() != 0) {
            hqsql += " and (upper(e.documentoCompraDto.nroSerie) like '%" + dtoFiltro.getNroSerieOrigen().toUpperCase() + "%'";
            hqsql += " or upper(e.documentoVentaDto.nroSerie) like '%" + dtoFiltro.getNroSerieOrigen().toUpperCase() + "%'";
            hqsql += " or upper(e.pedidoCompraDto.nroSerie) like '%" + dtoFiltro.getNroSerieOrigen().toUpperCase() + "%'";
            hqsql += " or upper(e.pedidoVentaDto.nroSerie) like '%" + dtoFiltro.getNroSerieOrigen().toUpperCase() + "%')";
        }

        if (dtoFiltro.getNumeroOrigen() != null && dtoFiltro.getNumeroOrigen().length() != 0) {
            hqsql += " and (upper(e.documentoCompraDto.numero) like '%" + dtoFiltro.getNumeroOrigen().toUpperCase() + "%'";
            hqsql += " or upper(e.documentoVentaDto.numero) like '%" + dtoFiltro.getNumeroOrigen().toUpperCase() + "%'";
            hqsql += " or upper(e.pedidoCompraDto.numero) like '%" + dtoFiltro.getNumeroOrigen().toUpperCase() + "%'";
            hqsql += " or upper(e.pedidoVentaDto.numero) like '%" + dtoFiltro.getNumeroOrigen().toUpperCase() + "%')";
        }


        if (dtoFiltro.getDescTercero() != null && dtoFiltro.getDescTercero().length() != 0) {
            hqsql += " and (upper(e.pedidoCompraDto.proveedorDto.descripcion) like '%" + dtoFiltro.getDescTercero().toUpperCase() + "%'";
            hqsql += " or upper(e.pedidoCompraDto.proveedorDto.numeroDocumento) like '%" + dtoFiltro.getDescTercero().toUpperCase() + "%'";
            hqsql += " or upper(e.pedidoVentaDto.clienteDto.descripcion) like '%" + dtoFiltro.getDescTercero().toUpperCase() + "%'";
            hqsql += " or upper(e.pedidoVentaDto.clienteDto.numeroDocumento) like '%" + dtoFiltro.getDescTercero().toUpperCase() + "%'";
            hqsql += " or upper(e.documentoCompraDto.proveedorDto.descripcion) like '%" + dtoFiltro.getDescTercero().toUpperCase() + "%'";
            hqsql += " or upper(e.documentoCompraDto.proveedorDto.numeroDocumento) like '%" + dtoFiltro.getDescTercero().toUpperCase() + "%'";
            hqsql += " or upper(e.documentoVentaDto.clienteDto.descripcion) like '%" + dtoFiltro.getDescTercero().toUpperCase() + "%'";
            hqsql += " or upper(e.documentoVentaDto.clienteDto.numeroDocumento) like '%" + dtoFiltro.getDescTercero().toUpperCase() + "%'";
            hqsql += ")";
        }

        hqsql += " and e.empresaDto.id = ?";
        listaParametros.add(sessionMBean.getEmpresaDto().getId());
        if (sessionMBean.getOrganizacionDto() != null && sessionMBean.getOrganizacionDto().getId() != null) {
            hqsql += " and e.organizacionDto.id = ?";
            listaParametros.add(sessionMBean.getOrganizacionDto().getId());
        }

        hqsql += " and e.tipo <> '" + ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV + "'";
        hqsql += " order by e.fechaEmision  desc";
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }

    public List<GuiaRemisionDto> obtenerIntercambios(GuiaRemisionDto dtoFiltro) throws DAOException {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        String hqsql = "select e from GuiaRemisionDto as e where e.id=e.id ";
        List<Object> listaParametros = new ArrayList<Object>();
        if (dtoFiltro.getId() != null && !dtoFiltro.getId().equals(0L)) {
            hqsql += " and e.id = ?";
            listaParametros.add(dtoFiltro.getId());
        }

        if (dtoFiltro.getDescripcion() != null && dtoFiltro.getDescripcion().length() != 0) {
            hqsql += " and upper(e.descripcion) like '%" + dtoFiltro.getDescripcion().toUpperCase() + "%'";
        }

        if (dtoFiltro.getNroSerie() != null && dtoFiltro.getNroSerie().length() != 0) {
            hqsql += " and upper(e.nroSerie) like '%" + dtoFiltro.getNroSerie().toUpperCase() + "%'";
        }

        if (dtoFiltro.getNroReferencia() != null && dtoFiltro.getNroReferencia().length() != 0) {
            hqsql += " and upper(e.nroReferencia) like '%" + dtoFiltro.getNroReferencia().toUpperCase() + "%'";
        }

        if (dtoFiltro.getEstado() != null && dtoFiltro.getEstado().length() != 0 && !dtoFiltro.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_TODOS)) {
            hqsql += " and upper(e.estado) = '" + dtoFiltro.getEstado() + "'";
        }

        if (dtoFiltro.getDescAlmacenOrigen() != null && dtoFiltro.getDescAlmacenOrigen().length() != 0) {
            hqsql += " and upper(e.almacenOrigenDto.nombre) like '%" + dtoFiltro.getDescAlmacenOrigen().toUpperCase() + "%'";
        }

        if (dtoFiltro.getDescAlmacenDestino() != null && dtoFiltro.getDescAlmacenDestino().length() != 0) {
            hqsql += " and upper(e.almacenDestinoDto.nombre) like '%" + dtoFiltro.getDescAlmacenDestino().toUpperCase() + "%'";
        }

        if (dtoFiltro.getIdProducto() != null && !dtoFiltro.getIdProducto().equals(0L)) {
            hqsql += " and exists (select 'X' from GuiaRemisionDetaDto as d where d.guiaRemisionDto.id = e.id and d.productoDto.id = ? )";
            listaParametros.add(dtoFiltro.getIdProducto());
        }

        if (dtoFiltro.getDescProducto() != null && dtoFiltro.getDescProducto().length() != 0) {
            hqsql += " and exists (select 'X' from GuiaRemisionDetaDto as d where d.guiaRemisionDto.id = e.id and (upper(d.productoDto.descripcion) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDto.sku) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDto.descripcionCorta) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDto.descripcionDetalle) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDto.descripcionIdioma1) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += " or upper(d.productoDto.descripcionIdioma2) like '%" + dtoFiltro.getDescProducto().toUpperCase() + "%'";
            hqsql += "))";
        }

        if (dtoFiltro.getFechaInicio() != null && dtoFiltro.getFechaFin() != null) {
            hqsql += " and e.fechaEmision between ? and ?";
            Calendar c = Calendar.getInstance();
            c.setTime(dtoFiltro.getFechaInicio());
            c.set(Calendar.HOUR, 0);
            c.set(Calendar.MINUTE, 0);
            c.set(Calendar.SECOND, 0);
            listaParametros.add(c.getTime());
            c.setTime(dtoFiltro.getFechaFin());
            c.set(Calendar.HOUR, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            listaParametros.add(c.getTime());
        }

        if (dtoFiltro.getFechaTrasladoInicio() != null && dtoFiltro.getFechaTrasladoFin() != null) {
            hqsql += " and e.fechaInicioTraslado between ? and ?";
            Calendar c = Calendar.getInstance();
            c.setTime(dtoFiltro.getFechaInicio());
            c.set(Calendar.HOUR, 0);
            c.set(Calendar.MINUTE, 0);
            c.set(Calendar.SECOND, 0);
            listaParametros.add(c.getTime());
            c.setTime(dtoFiltro.getFechaFin());
            c.set(Calendar.HOUR, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            listaParametros.add(c.getTime());
        }

        if (dtoFiltro.getFechaContableInicio() != null && dtoFiltro.getFechaContableFin() != null) {
            hqsql += " and e.fechaContable between ? and ?";
            Calendar c = Calendar.getInstance();
            c.setTime(dtoFiltro.getFechaInicio());
            c.set(Calendar.HOUR, 0);
            c.set(Calendar.MINUTE, 0);
            c.set(Calendar.SECOND, 0);
            listaParametros.add(c.getTime());
            c.setTime(dtoFiltro.getFechaFin());
            c.set(Calendar.HOUR, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            listaParametros.add(c.getTime());
        }

        hqsql += " and e.empresaDto.id = ?";
        listaParametros.add(sessionMBean.getEmpresaDto().getId());
        if (sessionMBean.getOrganizacionDto() != null && sessionMBean.getOrganizacionDto().getId() != null) {
            hqsql += " and e.organizacionDto.id = ?";
            listaParametros.add(sessionMBean.getOrganizacionDto().getId());
        }

        hqsql += " and e.tipo = '" + ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV + "'";
        hqsql += " order by e.fechaEmision  desc";
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }

    public List<GuiaRemisionDto> obtenerMovimientosPorNroSerieNumero(GuiaRemisionDto dto) throws DAOException {
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        String hqsql = "select e from GuiaRemisionDto as e where e.id=e.id ";
        List<Object> listaParametros = new ArrayList<Object>();
        hqsql += " and e.nroSerie = '" + dto.getNroSerie() + "'";
        hqsql += " and e.nroReferencia = '" + dto.getNroReferencia() + "' ";
        hqsql += " and e.empresaDto.id = ?";
        listaParametros.add(sessionMBean.getEmpresaDto().getId());
        if (sessionMBean.getOrganizacionDto() != null && sessionMBean.getOrganizacionDto().getId() != null) {
            hqsql += " and e.organizacionDto.id = ?";
            listaParametros.add(sessionMBean.getOrganizacionDto().getId());
        }
        if (dto.getId() != null) {
            hqsql += " and e.id <> ?";
            listaParametros.add(dto.getId());
        }
        return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
    }

    /**
     * Metodo para guardar, editar Guias de Remision
     *
     * @param dto Guia de Remision
     * @return cadena de satisfaccion
     */
    public String guardar(GuiaRemisionDto dto) {

        String to = null;
        String mensajeTrx = "";
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        try {
            if (dto.getOrganizacionDto() != null) {
                if (!verificarUniqueNroSerieNumero(dto)) {
                    return null;
                }
                {
                    dto.setUsuarioDto(sessionMBean.getSessionUsuarioDto());
                    dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
                    dto.setTerminal(sessionMBean.getSessionTerminal());
                }

                Boolean indicador = true;
                if (!dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA)) {
                    //Verificamos si tiene al menos un detalle
                    if (!verificarDetalles(dto)) {
                        to = null;
                        indicador = false;
                    }

                    if (!verificarFechaVencimientoLote(dto)) {
                        to = null;
                        indicador = false;
                    }

                } else {
                    if (dto.getId() != null && dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO)) {
                        //Verificamos si tiene al menos un detalle
                        if (!verificarDetalles(dto)) {
                            to = null;
                            indicador = false;
                        }
                        if (!verificarFechaVencimientoLote(dto)) {
                            to = null;
                            indicador = false;
                        }
                    }
                }
                //Verificamos si todos los detalles tienen al menos un almacen ubicacion 
                if (!verificarAlmacenUbicacionEnDetalles(dto)) {
                    to = null;
                    indicador = false;
                }

                if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV) {
                    if (dto.getAlmacenDestinoDto().equals(dto.getAlmacenOrigenDto())) {
                        to = null;
                        indicador = false;
                        mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.20");
                        recursosManager.showError(mensajeTrx);
                    }
                }
                if (indicador) {
                    dto = gestionarDatosSinGuia(dto);
                    definirCssPorEstado(dto);
                    if (sessionMBean.getAccion() == applicationMBean.getNuevo()) {
                        dto.setUsuarioCreacionDto(sessionMBean.getSessionUsuarioDto());
                        dto.setFechaCreacion(UtilCore.Fecha.obtenerFechaActualDate());
                        dto.setTerminalCreacion(sessionMBean.getSessionTerminal());
                        UtilCore.General.toUpperCaseDto(dto);

                        nuevo(dto);

                        mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                        recursosManager.showMessage(mensajeTrx);

                        to = "";//retroceder();

                    } else if (sessionMBean.getAccion() == applicationMBean.getEditar()) {
                        //Verificamos si se trata de una confirmacion
                        if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO)) {
                            indicador = verificarDatosAntesDeConfirmar(dto);
                        }
                        if (indicador) {
                            UtilCore.General.toUpperCaseDto(dto);
                            GuiaRemisionDto oldDto = obtenerPorId(dto.getId());
                            if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO)) {
                                if (!dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA)) {
                                    confirmar(dto);
                                }
                            }
                            editar(dto);
                            if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ANULADO)) {
                                if (!dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA)) {
                                    anular(dto, oldDto);
                                }
                            }
                            mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                            recursosManager.showMessage(mensajeTrx);
                            to = "";//retroceder();
                        } else {
                            to = null;
                        }
                    }


                } else {
                    to = null;
                }
            } else {
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("general.mensaje.no.organizacion");
                recursosManager.showError(mensajeTrx);
                to = null;
            }
        } catch (Exception ex) {
            mensajeTrx = ex.getMessage();
            recursosManager.showError(ex.getMessage());
            logger.error(mensajeTrx);

            to = null;
        }
        return to;
    }
    
    public String obtenerCadenaUltimaModificacionLista(GuiaRemisionDto dto) {
        String cad = "";
        int diasDif = UtilCore.Fecha.diferenciaDiasFechas(dto.getFecha(), UtilCore.Fecha.obtenerFechaActualDate());
        if (diasDif == 0) {
            SimpleDateFormat sdf = new SimpleDateFormat(com.brain.core.common.ConstantesCore.formatoHora);
            cad = obtenerEstadoCadena(dto) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.hoy.a.las") + " " + sdf.format(dto.getFecha());            
        }
        else if (diasDif == 1) {
            SimpleDateFormat sdf = new SimpleDateFormat(com.brain.core.common.ConstantesCore.formatoHora);
            cad = obtenerEstadoCadena(dto) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.ayer.a.las") + " " + sdf.format(dto.getFecha());
        }
        else if (diasDif >1 && diasDif < 7) {
            int diaSemana = 0;
            String diaTexto = "";
            Calendar calendario = Calendar.getInstance();
            calendario.setTime(UtilCore.Fecha.obtenerFechaActualDate());;
            SimpleDateFormat sdf = new SimpleDateFormat(com.brain.core.common.ConstantesCore.formatoHora);
            if (calendario.get(Calendar.DAY_OF_WEEK) > diasDif) {
                diaSemana = calendario.get(Calendar.DAY_OF_WEEK) - diasDif;
            }
            else {
                diaSemana = 7 - Math.abs(calendario.get(Calendar.DAY_OF_WEEK) - diasDif);                
            }
            diaTexto = obtenerDiaSemanaTexto(diaSemana);
            cad = obtenerEstadoCadena(dto) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.el") + " " + diaTexto + " " + sdf.format(dto.getFecha());
        }
        else {
            Calendar calendario = Calendar.getInstance();
            calendario.setTime(dto.getFecha());
            cad = obtenerEstadoCadena(dto) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.hace") + " " + UtilCore.Fecha.diferenciaDiasFechas(dto.getFecha(), UtilCore.Fecha.obtenerFechaActualDate()) + " " + UtilCore.Internacionalizacion.getMensajeInternacional("general.label.dias");

        }
        return cad;
    }
    
    public String obtenerEstadoCadena(GuiaRemisionDto dto) {
        String cad = "";
        if (dto.getFecha().after(dto.getFechaCreacion())) {
            if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ELABORACION)) {
                cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.modificado");
            }
            else if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ANULADO)) {
                cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.anulado");
            }
            else if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO)) {
                cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.confirmado");
            }
        }
        else {
            cad = UtilCore.Internacionalizacion.getMensajeInternacional("general.label.creado");
        }
        return cad;
    }
    
    public String obtenerDiaSemanaTexto(int dia) {
        String[] diasSemana = {
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.domingo.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.lunes.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.martes.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.miercoles.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.jueves.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.viernes.a.las"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.sabado.a.las")
        };
        return diasSemana[dia-1];
    }
    
    public String obtenerMesTexto(int mes) {
        String[] meses = {
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.enero"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.febrero"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.marzo"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.abril"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.mayo"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.junio"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.julio"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.agosto"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.setiembre"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.octubre"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.noviembre"),
            UtilCore.Internacionalizacion.getMensajeInternacional("general.label.diciembre")            
        };
        return meses[mes];
    }

    public String revisarValidacinoesAntesDeGuardar(GuiaRemisionDto dto) {

        String to = null;
        String mensajeTrx = "";
        SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
        try {
            if (dto.getOrganizacionDto() != null) {
                if (!verificarUniqueNroSerieNumero(dto)) {
                    return null;
                }

                Boolean indicador = true;
                if (!dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA)) {
                    //Verificamos si tiene al menos un detalle
                    if (!verificarDetalles(dto)) {
                        to = null;
                        indicador = false;
                    }

                    if (!verificarFechaVencimientoLote(dto)) {
                        to = null;
                        indicador = false;
                    }

                } else {
                    if (dto.getId() != null && dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO)) {
                        //Verificamos si tiene al menos un detalle
                        if (!verificarDetalles(dto)) {
                            to = null;
                            indicador = false;
                        }
                        if (!verificarFechaVencimientoLote(dto)) {
                            to = null;
                            indicador = false;
                        }
                    }
                }
                //Verificamos si todos los detalles tienen al menos un almacen ubicacion 
                if (!verificarAlmacenUbicacionEnDetalles(dto)) {
                    to = null;
                    indicador = false;
                }

                if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV) {
                    if (dto.getAlmacenDestinoDto().equals(dto.getAlmacenOrigenDto())) {
                        to = null;
                        indicador = false;
                        mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.20");
                        recursosManager.showError(mensajeTrx);
                    }
                }
                if (indicador) {
                    dto = gestionarDatosSinGuia(dto);
                    if (sessionMBean.getAccion() == applicationMBean.getEditar()) {
                        //Verificamos si se trata de una confirmacion
                        if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO)) {
                            indicador = verificarDatosAntesDeConfirmar(dto);
                        }
                        if (indicador) {
                            to = "";//retroceder();
                        } else {
                            to = null;
                        }
                    }


                } else {
                    to = null;
                }
            } else {
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("general.mensaje.no.organizacion");
                recursosManager.showError(mensajeTrx);
                to = null;
            }
        } catch (Exception ex) {
            mensajeTrx = ex.getMessage();
            recursosManager.showError(ex.getMessage());
            logger.error(mensajeTrx);

            to = null;
        }
        return to;
    }

    public Boolean verificarFechaVencimientoLote(GuiaRemisionDto dto) {
        Boolean resultado = true;
        if (dto.getTipo() == 1) {
            if (dto.getListaDetalles() != null) {
                if (!dto.getListaDetalles().isEmpty()) {
                    for (GuiaRemisionDetaDto hijo : dto.getListaDetalles()) {
                        if (hijo.getFechaVencimiento() == null) {
                            resultado = false;
                        }
                    }
                }
            }
            if (!resultado) {
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.29"));
            }
        }
        return resultado;
    }

    public void definirCssPorEstado(GuiaRemisionDto dto) {
        if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ELABORACION)) {
            dto.setInlinestyle(ConstantesCore.cssEstados.cssElaboracion);
        } else if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ANULADO)) {
            dto.setInlinestyle(ConstantesCore.cssEstados.cssAnulado);
        } else if (dto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO)) {
            dto.setInlinestyle(ConstantesCore.cssEstados.cssConfirmado);
        }
    }

    //No debe repetirse la combinacion {nroSerie-numero}
    public Boolean verificarUniqueNroSerieNumero(GuiaRemisionDto dto) {
        try {
            if (dto.getNroSerie() != null && dto.getNroSerie().length() != 0) {
                if (dto.getNroReferencia() != null && dto.getNroReferencia().length() != 0) {
                    List<GuiaRemisionDto> lst = obtenerMovimientosPorNroSerieNumero(dto);
                    if (lst != null) {
                        if (!lst.isEmpty()) {
                            recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("movimiento.mensaje.nroserie.numero.duplicado"));
                            return false;
                        }
                    }
                }
            }
        } catch (Exception ex) {
            logger.error(ex.getMessage());
        }

        return true;
    }

    public GuiaRemisionDto gestionarDatosSinGuia(GuiaRemisionDto dto) {
        if (!dto.getFlagGuia()) {
            dto.setRazonSocialRemitente(null);
            dto.setRucRemitente(null);
            dto.setDireccionRemitente(null);
            dto.setRazonSocialDestinatario(null);
            dto.setRucDestinatario(null);
            dto.setDireccionDestinatario(null);
            dto.setRucTransportista(null);
            dto.setRazonSocialTransportista(null);
            dto.setDireccionTransportista(null);
            dto.setMarcaTransporte(null);
            dto.setModeloTransporte(null);
            dto.setPlacaTransporte(null);
            dto.setInscripcionTransporte(null);
            dto.setNombreConductor(null);
            dto.setDocumentoConductor(null);
            dto.setLicenciaConductor(null);
        }
        return dto;
    }

    public Boolean validarDatosGrDetaItem(GrDetaItemDto grDetaDto) {
        Boolean resultado = true;
        if (grDetaDto.getCantidadMovida() != null) {
            if (grDetaDto.getCantidadMovida().compareTo(BigDecimal.ZERO) <= 0) {
                resultado = false;
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.19"));
            }
        } else {
            resultado = false;
            recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.19"));
        }
        return resultado;
    }

    public Boolean verificarDatosAntesDeConfirmar(GuiaRemisionDto dto) {
        Boolean resultado = true;
        if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL) {
            //Primero verificamos el stock para cada detalle que se va vender
            for (GuiaRemisionDetaDto hijo : dto.getListaDetalles()) {
                for (GrDetaItemDto item : hijo.getListaDetalles()) {
                    resultado = resultado && verificarStock(hijo, item);
                }
            }
        }
        return resultado;
    }

    public Boolean verificarStock(GuiaRemisionDetaDto detaDto, GrDetaItemDto grDetaDto) {
        Boolean resultado = true;
        try {

            StockManager stockManager = (StockManager) WebServletContextListener.getApplicationContext().getBean("stockManager");
            //Verificamos si el stock del almacen ubicacion tiene la cantidad de producto suficientes
            List<StockDto> lstStock = stockManager.obtenerStockPorAlmUbiYProducto(detaDto, grDetaDto.getAlmacenUbicacionOrigenDto());

            
            if (lstStock != null && !lstStock.isEmpty()) {
                StockDto stockDto = lstStock.get(0);
                if (grDetaDto.getCantidadMovida().compareTo(stockDto.getCantidad()) > 0) {
                    if (!detaDto.getProductoDetaDto().getVentaSinStock()) {
                        resultado = false;
                        recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.no.stock1") + " " + detaDto.getProductoDetaDto().getProductoDto().getDescripcion() + " " + UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.no.stock2"));
                    }
                }
            } else {
                if (!detaDto.getProductoDetaDto().getVentaSinStock()) {
                    resultado = false;
                    recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.no.stock1") + " " + detaDto.getProductoDetaDto().getProductoDto().getDescripcion() + " " + UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.no.stock2"));
                }
            }

        } catch (Exception ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());
        }
        return resultado;
    }

    public void anular(GuiaRemisionDto dto, GuiaRemisionDto grDto) throws DAOException {
        PedidoCompraDetaManager pedidoCompraDetaManager = (PedidoCompraDetaManager) WebServletContextListener.getApplicationContext().getBean("pedidoCompraDetaManager");
        PedidoVentaDetaManager pedidoVentaDetaManager = (PedidoVentaDetaManager) WebServletContextListener.getApplicationContext().getBean("pedidoVentaDetaManager");
        DocumentoCompraDetaManager documentoCompraDetaManager = (DocumentoCompraDetaManager) WebServletContextListener.getApplicationContext().getBean("documentoCompraDetaManager");
        DocumentoVentaDetaManager documentoVentaDetaManager = (DocumentoVentaDetaManager) WebServletContextListener.getApplicationContext().getBean("documentoVentaDetaManager");
        GuiaRemisionDetaManager guiaRemisionDetaManager = (GuiaRemisionDetaManager) WebServletContextListener.getApplicationContext().getBean("guiaRemisionDetaManager");
        //Actualizamos los estados de los detalles
        PedidoCompraDetaDto pcdDto = null;
        PedidoVentaDetaDto pvdDto = null;
        DocumentoCompraDetaDto dcdDto = null;
        DocumentoVentaDetaDto dvdDto = null;
        List<GuiaRemisionDetaDto> lst = null;
        for (GuiaRemisionDetaDto hijo : dto.getListaDetalles()) {
            BigDecimal sumaTotal = BigDecimal.ZERO;
            //Si y solo si el estado anterior de la guia remision es CONFIRMADA se haran estos cambios en los detalles origen
            if (grDto.getEstado().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO)) {
                if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_PC)) {
                    pcdDto = pedidoCompraDetaManager.obtenerPorId(hijo.getPedidoCompraDetaDto().getId());
                    //Verificamos si existe alguna guia de remision que atendio a este item 
                    lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(pcdDto);
                    sumaTotal = sumarCantidadDetalles(lst);
                    //Si la suma pedida en un detalle obtenido de otras guias de remision es igual a cero
                    if (sumaTotal.compareTo(BigDecimal.ZERO) == 0) {
                        pcdDto.setEstado(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_EN_ESPERA);
                    }//Si la suma pedida en un detalle obtenido de otras guias de remision es mayor que cero y 
                    //la cantidad pedida es mayor que la suma ya recibida
                    else if (sumaTotal.compareTo(BigDecimal.ZERO) > 0 && pcdDto.getCantidad().compareTo(sumaTotal) > 0) {
                        pcdDto.setEstado(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_REC_PARCIAL);
                    }
                    pedidoCompraDetaManager.editar(pcdDto);
                } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_PV)) {
                    pvdDto = pedidoVentaDetaManager.obtenerPorId(hijo.getPedidoVentaDetaDto().getId());

                    //Verificamos si existe alguna guia de remision que atendio a este item y vemos si sumada a este pedido ya se
                    //atendio en su totalidad
                    lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(pvdDto);
                    sumaTotal = sumarCantidadDetalles(lst);
                    //Si la suma vendida en un detalle obtenido de otras guias de remision es igual a cero
                    if (sumaTotal.compareTo(BigDecimal.ZERO) == 0) {
                        pvdDto.setEstado(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_POR_ENTREGAR);
                    }//Si la suma vendida en un detalle obtenido de otras guias de remision es mayor que cero y 
                    //la cantidad vendida es mayor que la suma ya despachada
                    else if (sumaTotal.compareTo(BigDecimal.ZERO) > 0 && pvdDto.getCantidad().compareTo(sumaTotal) > 0) {
                        pvdDto.setEstado(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_ENT_PARCIAL);
                    }
                    pedidoVentaDetaManager.editar(pvdDto);
                } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_DC)) {
                    dcdDto = documentoCompraDetaManager.obtenerPorId(hijo.getDocumentoCompraDetaDto().getId());
                    //Verificamos si existe alguna guia de remision que atendio a este item y vemos si sumada a este documento ya se
                    //atendio en su totalidad
                    lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(dcdDto);
                    sumaTotal = sumarCantidadDetalles(lst);
                    //Si la suma pedida en un detalle obtenido de otras guias de remision es igual a cero
                    if (sumaTotal.compareTo(BigDecimal.ZERO) == 0) {
                        dcdDto.setEstado(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_EN_ESPERA);
                    }//Si la suma pedida en un detalle obtenido de otras guias de remision es mayor que cero y 
                    //la cantidad pedida es mayor que la suma ya recibida
                    else if (sumaTotal.compareTo(BigDecimal.ZERO) > 0 && dcdDto.getCantidad().compareTo(sumaTotal) > 0) {
                        dcdDto.setEstado(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_REC_PARCIAL);
                    }
                    documentoCompraDetaManager.editar(dcdDto);
                } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_DV)) {
                    dvdDto = documentoVentaDetaManager.obtenerPorId(hijo.getDocumentoVentaDetaDto().getId());
                    //Verificamos si existe alguna guia de remision que atendio a este item y vemos si sumada a este documento ya se
                    //atendio en su totalidad
                    lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(dvdDto);
                    sumaTotal = sumarCantidadDetalles(lst);
                    //Si la suma vendida en un detalle obtenido de otras guias de remision es igual a cero
                    if (sumaTotal.compareTo(BigDecimal.ZERO) == 0) {
                        dvdDto.setEstado(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_POR_ENTREGAR);
                    }//Si la suma vendida en un detalle obtenido de otras guias de remision es mayor que cero y 
                    //la cantidad vendida es mayor que la suma ya despachada
                    else if (sumaTotal.compareTo(BigDecimal.ZERO) > 0 && dvdDto.getCantidad().compareTo(sumaTotal) > 0) {
                        dvdDto.setEstado(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_ENT_PARCIAL);
                    }
                    documentoVentaDetaManager.editar(dvdDto);
                }
            }
        }
    }

    public void confirmar(GuiaRemisionDto dto) throws DAOException {
        PedidoCompraDetaManager pedidoCompraDetaManager = (PedidoCompraDetaManager) WebServletContextListener.getApplicationContext().getBean("pedidoCompraDetaManager");
        PedidoVentaDetaManager pedidoVentaDetaManager = (PedidoVentaDetaManager) WebServletContextListener.getApplicationContext().getBean("pedidoVentaDetaManager");
        DocumentoCompraDetaManager documentoCompraDetaManager = (DocumentoCompraDetaManager) WebServletContextListener.getApplicationContext().getBean("documentoCompraDetaManager");
        DocumentoVentaDetaManager documentoVentaDetaManager = (DocumentoVentaDetaManager) WebServletContextListener.getApplicationContext().getBean("documentoVentaDetaManager");
        GuiaRemisionDetaManager guiaRemisionDetaManager = (GuiaRemisionDetaManager) WebServletContextListener.getApplicationContext().getBean("guiaRemisionDetaManager");
        //Actualizamos los estados de los detalles
        PedidoCompraDetaDto pcdDto = null;
        PedidoVentaDetaDto pvdDto = null;
        DocumentoCompraDetaDto dcdDto = null;
        DocumentoVentaDetaDto dvdDto = null;
        List<GuiaRemisionDetaDto> lst = null;
        for (GuiaRemisionDetaDto hijo : dto.getListaDetalles()) {
            BigDecimal sumaTotal = BigDecimal.ZERO;
            if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_PC)) {
                pcdDto = pedidoCompraDetaManager.obtenerPorId(hijo.getPedidoCompraDetaDto().getId());
                if (pcdDto.getCantidad().compareTo(hijo.getCantidadMovida()) > 0) {
                    //Verificamos si existe alguna guia de remision que atendio a este item y vemos si sumada a este pedido ya se
                    //atendio en su totalidad
                    lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(pcdDto);
                    sumaTotal = sumarCantidadDetalles(lst).add(hijo.getCantidadMovida());
                    if (sumaTotal.compareTo(pcdDto.getCantidad()) >= 0) {
                        pcdDto.setEstado(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_RECIBIDO);
                    } else {
                        pcdDto.setEstado(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_REC_PARCIAL);
                    }
                } else { //Si es mayor o igual se asume que se ha recibido en su totalidad
                    pcdDto.setEstado(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_RECIBIDO);
                }
                pedidoCompraDetaManager.editar(pcdDto);
            } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_PV)) {
                pvdDto = pedidoVentaDetaManager.obtenerPorId(hijo.getPedidoVentaDetaDto().getId());
                if (pvdDto.getCantidad().compareTo(hijo.getCantidadMovida()) > 0) {
                    //Verificamos si existe alguna guia de remision que atendio a este item y vemos si sumada a este pedido ya se
                    //atendio en su totalidad
                    lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(pvdDto);
                    sumaTotal = sumarCantidadDetalles(lst).add(hijo.getCantidadMovida());
                    if (sumaTotal.compareTo(pvdDto.getCantidad()) >= 0) {
                        pvdDto.setEstado(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_ENTREGADO);
                    } else {
                        pvdDto.setEstado(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_ENT_PARCIAL);
                    }
                } else { //Si es mayor o igual se asume que se ha recibido en su totalidad
                    pvdDto.setEstado(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_ENTREGADO);
                }
                pedidoVentaDetaManager.editar(pvdDto);
            } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_DC)) {
                dcdDto = documentoCompraDetaManager.obtenerPorId(hijo.getDocumentoCompraDetaDto().getId());
                if (dcdDto.getCantidad().compareTo(hijo.getCantidadMovida()) > 0) {
                    //Verificamos si existe alguna guia de remision que atendio a este item y vemos si sumada a este documento ya se
                    //atendio en su totalidad
                    lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(dcdDto);
                    sumaTotal = sumarCantidadDetalles(lst).add(hijo.getCantidadMovida());
                    if (sumaTotal.compareTo(dcdDto.getCantidad()) >= 0) {
                        dcdDto.setEstado(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_RECIBIDO);
                    } else {
                        dcdDto.setEstado(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_REC_PARCIAL);
                    }
                } else { //Si es mayor o igual se asume que se ha recibido en su totalidad
                    dcdDto.setEstado(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_RECIBIDO);
                }
                documentoCompraDetaManager.editar(dcdDto);
            } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_DV)) {
                dvdDto = documentoVentaDetaManager.obtenerPorId(hijo.getDocumentoVentaDetaDto().getId());
                if (dvdDto.getCantidad().compareTo(hijo.getCantidadMovida()) > 0) {
                    //Verificamos si existe alguna guia de remision que atendio a este item y vemos si sumada a este documento ya se
                    //atendio en su totalidad
                    lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(dvdDto);
                    sumaTotal = sumarCantidadDetalles(lst).add(hijo.getCantidadMovida());
                    if (sumaTotal.compareTo(dvdDto.getCantidad()) >= 0) {
                        dvdDto.setEstado(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_ENTREGADO);
                    } else {
                        dvdDto.setEstado(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_ENT_PARCIAL);
                    }
                } else { //Si es mayor o igual se asume que se ha recibido en su totalidad
                    dvdDto.setEstado(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_ENTREGADO);
                }
                documentoVentaDetaManager.editar(dvdDto);
            }
        }
    }

    public BigDecimal sumarCantidadDetalles(List<GuiaRemisionDetaDto> lst) {
        BigDecimal suma = BigDecimal.ZERO;
        if (lst != null) {
            for (GuiaRemisionDetaDto x : lst) {
                suma = suma.add(x.getCantidadMovida());
            }
        }
        return suma;
    }

    public Boolean verificarDetalles(GuiaRemisionDto dto) {
        if (dto.getListaDetalles() != null) {
            if (!dto.getListaDetalles().isEmpty() && dto.getListaDetalles().size() > 0) {
                return true;
            } else {
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.no.detalles"));
            }
        } else {
            recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.no.detalles"));
        }
        return false;
    }

    public Boolean verificarAlmacenUbicacionEnDetalles(GuiaRemisionDto dto) {
        Boolean resultado = true;
        if (dto.getListaDetalles() != null) {
            if (!dto.getListaDetalles().isEmpty()) {
                for (GuiaRemisionDetaDto x : dto.getListaDetalles()) {
                    if (x.getListaDetalles() == null) {
                        resultado = false;
                        recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.3") + " " + x.getProductoDetaDto().getProductoDto().getDescripcion());
                    } else {
                        if (x.getListaDetalles().isEmpty()) {
                            resultado = false;
                            recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.3") + " " + x.getProductoDetaDto().getProductoDto().getDescripcion());
                        } else {
                            //Verificamos que las ubicacion pertenezcan al almacen del movimiento
                            for (GrDetaItemDto grDetaDto : x.getListaDetalles()) {
                                if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_ING) {
                                    if (!dto.getAlmacenDestinoDto().equals(grDetaDto.getAlmacenUbicacionDestinoDto().getAlmacenDto())) {
                                        resultado = false;
                                        recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.21") + " " + x.getProductoDetaDto().getProductoDto().getDescripcion() + " / " + UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.22") + " " + grDetaDto.getAlmacenUbicacionDestinoDto().getNombre());
                                    }
                                } else if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL) {
                                    if (!dto.getAlmacenOrigenDto().equals(grDetaDto.getAlmacenUbicacionOrigenDto().getAlmacenDto())) {
                                        resultado = false;
                                        recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.23") + " " + x.getProductoDetaDto().getProductoDto().getDescripcion() + " / " + UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.22") + " " + grDetaDto.getAlmacenUbicacionDestinoDto().getNombre());
                                    }
                                } else if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV) {
                                    if (!dto.getAlmacenOrigenDto().equals(grDetaDto.getAlmacenUbicacionOrigenDto().getAlmacenDto()) || !dto.getAlmacenDestinoDto().equals(grDetaDto.getAlmacenUbicacionDestinoDto().getAlmacenDto())) {
                                        resultado = false;
                                        recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.24") + " " + x.getProductoDetaDto().getProductoDto().getDescripcion() + " / " + UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.22") + " " + grDetaDto.getAlmacenUbicacionDestinoDto().getNombre());
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return resultado;
    }

    public void reordenarDetalles(GuiaRemisionDto dto) {
        List<GuiaRemisionDetaDto> lstDetalles = dto.getListaDetalles();
        GuiaRemisionDetaManager guiaRemisionDetaManager = (GuiaRemisionDetaManager) WebServletContextListener.getApplicationContext().getBean("guiaRemisionDetaManager");
        try {
            UtilCore.General.ordena(lstDetalles, "item");
            int count = 0;
            for (GuiaRemisionDetaDto d : lstDetalles) {
                count++;
                d.setItem(count);
            }
            if (dto.getId() != null) {
                guiaRemisionDetaManager.nuevoMuchos(lstDetalles);
            }
        } catch (Exception ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());
        }
    }

    public SelectItem[] siEstadosGuiaRemisionTodos() {
        SelectItem[] si = new SelectItem[4];
        si[0] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ELABORACION, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_ESTADO_ELABORACION);
        si[1] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_CONFIRMADO, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_ESTADO_CONFIRMADO);
        si[2] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_ANULADO, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_ESTADO_ANULADO);
        si[3] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_ESTADO_TODOS, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_ESTADO_TODOS);
        return si;
    }

    public SelectItem[] siTipos() {
        SelectItem[] si = new SelectItem[2];
        si[0] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_ING, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_TIPO_ING);
        si[1] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_TIPO_SAL);
        return si;
    }

    public SelectItem[] siTiposTodos() {
        SelectItem[] si = new SelectItem[3];
        si[0] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_ING, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_TIPO_ING);
        si[1] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_TIPO_SAL);
        si[2] = new SelectItem(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_TODOS, ConstantesInve.ValoresConstantes.GUIA_REMISION_DESC_TIPO_TODOS);
        return si;
    }

    public Boolean seleccionaPedidoCompra(GuiaRemisionDto dto, PedidoCompraDto dtoPC) {
        Boolean resultado = false;
        try {
            for (PedidoCompraDetaDto x : dtoPC.getListaDetalles()) {
                if (x.getProductoDetaDto().getProductoDto().getAlmacenado()) {
                    resultado = true;
                }
            }
            if (resultado) {
                SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
                GuiaRemisionDetaManager guiaRemisionDetaManager = (GuiaRemisionDetaManager) WebServletContextListener.getApplicationContext().getBean("guiaRemisionDetaManager");
                PedidoCompraDetaManager pedidoCompraDetaManager = (PedidoCompraDetaManager) WebServletContextListener.getApplicationContext().getBean("pedidoCompraDetaManager");
                ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
                //Asignamos algunos valores del Pedido de Compra a la Guia de Remision
                dto.setMotivoDto(parametroManager.obtenerPorId(idParametroPC));
                dto.setProviene(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_PC);
                dto.setOrigenTexto(UtilCore.Internacionalizacion.getMensajeInternacional("key.entidad.pedido.compra") + " - " + dtoPC.getId() + " - " + dtoPC.getProveedorDto().getDescripcion());
                dto.setAlmacenDestinoDto(dtoPC.getAlmacenDto());
                dto.setDireccionAlmacenDestino(dtoPC.getAlmacenDto().getDireccion());
                dto.setRucRemitente(dtoPC.getProveedorDto().getNumeroDocumento().toString());
                dto.setRazonSocialRemitente(dtoPC.getProveedorDto().getDescripcion());
                dto.setDireccionRemitente(dtoPC.getProveedorDto().getDireccion());
                dto.setRucDestinatario(sessionMBean.getOrganizacionDto().getRuc());
                dto.setRazonSocialDestinatario(sessionMBean.getOrganizacionDto().getNombre());
                dto.setDireccionDestinatario(dtoPC.getAlmacenDto().getDireccion());
                dto.setPedidoCompraDto(dtoPC);

                //Creamos los items de la Guia de Remision
                dto.setListaDetalles(new ArrayList<GuiaRemisionDetaDto>());
                GuiaRemisionDetaDto detaDto = null;
                List<GuiaRemisionDetaDto> lst = null;
                BigDecimal sumaTotal = BigDecimal.ZERO;
                int cont = 0;
                for (PedidoCompraDetaDto x : dtoPC.getListaDetalles()) {
                    if (!x.getProductoDetaDto().getProductoDto().getTipoProducto().equals(ConstantesConf.ValoresConstantes.PRODUCTO_COD_TIPO_SERVICIO)) {
                        x = pedidoCompraDetaManager.obtenerPorId(x.getId());
                        if (!x.getEstado().equals(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_RECIBIDO)) {
                            cont++;
                            detaDto = new GuiaRemisionDetaDto();
                            detaDto.setGuiaRemisionDto(dto);
                            detaDto.setItem(cont);
                            detaDto.setProductoDetaDto(x.getProductoDetaDto());
                            detaDto.setUnidadMedidaDto(x.getUnidadMedidaDto());

                            if (x.getEstado().equals(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_EN_ESPERA)) {
                                detaDto.setCantidadMovida(x.getCantidad());
                            } else {
                                lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(x);
                                sumaTotal = sumarCantidadDetalles(lst);
                                detaDto.setCantidadMovida(x.getCantidad().subtract(sumaTotal));
                            }
                            detaDto.setPedidoCompraDetaDto(x);
                            //Agregamos por default toda la cantidad movida al almacen ubicacion por default
                            AlmacenUbicacionDto auDefault = null;
                            for (AlmacenUbicacionDto au : dtoPC.getAlmacenDto().getListaAlmacenUbicacion()) {
                                if (au.getPrincipal()) {
                                    auDefault = au;
                                }
                            }
                            if (auDefault != null) {
                                GrDetaItemDto gr = new GrDetaItemDto();
                                gr.setGuiaRemisionDetaDto(detaDto);
                                gr.setAlmacenUbicacionDestinoDto(auDefault);
                                gr.setCantidadMovida(detaDto.getCantidadMovida());
                                detaDto.setListaDetalles(new ArrayList<GrDetaItemDto>());
                                detaDto.getListaDetalles().add(gr);
                            }
                            dto.getListaDetalles().add(detaDto);
                        }
                    }
                }
            } else {
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.25"));
            }
        } catch (DAOException ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());
        }
        return resultado;
    }

    public Boolean seleccionaPedidoVenta(GuiaRemisionDto dto, PedidoVentaDto dtoPV) {
        Boolean resultado = false;
        try {
            for (PedidoVentaDetaDto x : dtoPV.getListaDetalles()) {
                if (x.getProductoDetaDto().getProductoDto().getAlmacenado()) {
                    resultado = true;
                }
            }
            if (resultado) {
                SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
                GuiaRemisionDetaManager guiaRemisionDetaManager = (GuiaRemisionDetaManager) WebServletContextListener.getApplicationContext().getBean("guiaRemisionDetaManager");
                PedidoVentaDetaManager pedidoVentaDetaManager = (PedidoVentaDetaManager) WebServletContextListener.getApplicationContext().getBean("pedidoVentaDetaManager");
                ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
                //Asignamos algunos valores del Pedido de Venta a la Guia de Remision
                dto.setMotivoDto(parametroManager.obtenerPorId(idParametroPV));
                dto.setProviene(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_PV);
                dto.setOrigenTexto(UtilCore.Internacionalizacion.getMensajeInternacional("key.entidad.pedido.venta") + " - " + dtoPV.getId() + " - " + dtoPV.getClienteDto().getDescripcion());
                dto.setAlmacenOrigenDto(dtoPV.getAlmacenDto());
                dto.setDireccionAlmacenOrigen(dtoPV.getAlmacenDto().getDireccion());
                dto.setRucDestinatario(dtoPV.getClienteDto().getNumeroDocumento().toString());
                dto.setRazonSocialDestinatario(dtoPV.getClienteDto().getDescripcion());
                dto.setDireccionDestinatario(dtoPV.getClienteDto().getDireccion());
                dto.setRucRemitente(sessionMBean.getOrganizacionDto().getRuc());
                dto.setRazonSocialRemitente(sessionMBean.getOrganizacionDto().getNombre());
                dto.setDireccionRemitente(dtoPV.getAlmacenDto().getDireccion());
                dto.setPedidoVentaDto(dtoPV);

                //Creamos los items de la Guia de Remision
                dto.setListaDetalles(new ArrayList<GuiaRemisionDetaDto>());
                GuiaRemisionDetaDto detaDto = null;
                List<GuiaRemisionDetaDto> lst = null;
                BigDecimal sumaTotal = BigDecimal.ZERO;
                int cont = 0;
                for (PedidoVentaDetaDto x : dtoPV.getListaDetalles()) {
                    if (!x.getProductoDetaDto().getProductoDto().getTipoProducto().equals(ConstantesConf.ValoresConstantes.PRODUCTO_COD_TIPO_SERVICIO)) {
                        x = pedidoVentaDetaManager.obtenerPorId(x.getId());
                        if (!x.getEstado().equals(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_ENTREGADO)) {
                            cont++;
                            detaDto = new GuiaRemisionDetaDto();
                            detaDto.setGuiaRemisionDto(dto);
                            detaDto.setItem(cont);
                            detaDto.setProductoDetaDto(x.getProductoDetaDto());
                            detaDto.setUnidadMedidaDto(x.getUnidadMedidaDto());
                            if (x.getEstado().equals(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_POR_ENTREGAR)) {
                                detaDto.setCantidadMovida(x.getCantidad());
                            } else {
                                lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(x);
                                sumaTotal = sumarCantidadDetalles(lst);
                                detaDto.setCantidadMovida(x.getCantidad().subtract(sumaTotal));
                            }
                            detaDto.setPedidoVentaDetaDto(x);
                            //Agregamos por default toda la cantidad movida al almacen ubicacion por default
                            AlmacenUbicacionDto auDefault = null;
                            for (AlmacenUbicacionDto au : dtoPV.getAlmacenDto().getListaAlmacenUbicacion()) {
                                if (au.getPrincipal()) {
                                    auDefault = au;
                                }
                            }
                            if (auDefault != null) {
                                GrDetaItemDto gr = new GrDetaItemDto();
                                gr.setGuiaRemisionDetaDto(detaDto);
                                gr.setAlmacenUbicacionOrigenDto(auDefault);
                                gr.setCantidadMovida(detaDto.getCantidadMovida());
                                detaDto.setListaDetalles(new ArrayList<GrDetaItemDto>());
                                detaDto.getListaDetalles().add(gr);
                            }
                            dto.getListaDetalles().add(detaDto);
                        }
                    }
                }
            } else {
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.26"));
            }
        } catch (DAOException ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());
        }
        return resultado;
    }

    public Boolean seleccionaDocumentoCompra(GuiaRemisionDto dto, DocumentoCompraDto dtoDC) {
        Boolean resultado = false;
        try {
            for (DocumentoCompraDetaDto x : dtoDC.getListaDetalles()) {
                if (x.getProductoDetaDto().getProductoDto().getAlmacenado()) {
                    resultado = true;
                }
            }
            if (resultado) {
                SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
                GuiaRemisionDetaManager guiaRemisionDetaManager = (GuiaRemisionDetaManager) WebServletContextListener.getApplicationContext().getBean("guiaRemisionDetaManager");
                DocumentoCompraDetaManager documentoCompraDetaManager = (DocumentoCompraDetaManager) WebServletContextListener.getApplicationContext().getBean("documentoCompraDetaManager");
                ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
                //Asignamos algunos valores del Documento de Compra a la Guia de Remision
                dto.setMotivoDto(parametroManager.obtenerPorId(idParametroDC));
                dto.setProviene(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_DC);
                dto.setOrigenTexto(UtilCore.Internacionalizacion.getMensajeInternacional("key.entidad.documento.compra") + " - " + dtoDC.getId() + " - " + dtoDC.getProveedorDto().getDescripcion());
                dto.setAlmacenDestinoDto(obtenerAlmacenPorDefault());
                dto.setDireccionAlmacenDestino(dto.getAlmacenDestinoDto().getDireccion());
                dto.setRucRemitente(dtoDC.getProveedorDto().getNumeroDocumento().toString());
                dto.setRazonSocialRemitente(dtoDC.getProveedorDto().getDescripcion());
                dto.setDireccionRemitente(dtoDC.getProveedorDto().getDireccion());
                dto.setRucDestinatario(sessionMBean.getOrganizacionDto().getRuc());
                dto.setRazonSocialDestinatario(sessionMBean.getOrganizacionDto().getNombre());
                dto.setDireccionDestinatario(dto.getAlmacenDestinoDto().getDireccion());
                dto.setDocumentoCompraDto(dtoDC);
                //Creamos los items de la Guia de Remision
                dto.setListaDetalles(new ArrayList<GuiaRemisionDetaDto>());
                GuiaRemisionDetaDto detaDto = null;
                List<GuiaRemisionDetaDto> lst = null;
                BigDecimal sumaTotal = BigDecimal.ZERO;
                int cont = 0;
                for (DocumentoCompraDetaDto x : dtoDC.getListaDetalles()) {
                    if (!x.getProductoDetaDto().getProductoDto().getTipoProducto().equals(ConstantesConf.ValoresConstantes.PRODUCTO_COD_TIPO_SERVICIO)) {
                        x = documentoCompraDetaManager.obtenerPorId(x.getId());
                        if (!x.getEstado().equals(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_RECIBIDO)) {
                            cont++;
                            detaDto = new GuiaRemisionDetaDto();
                            detaDto.setGuiaRemisionDto(dto);
                            detaDto.setItem(cont);
                            detaDto.setProductoDetaDto(x.getProductoDetaDto());
                            detaDto.setUnidadMedidaDto(x.getUnidadMedidaDto());
                            if (x.getEstado().equals(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_EN_ESPERA)) {
                                detaDto.setCantidadMovida(x.getCantidad());
                            } else {
                                lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(x);
                                sumaTotal = sumarCantidadDetalles(lst);
                                detaDto.setCantidadMovida(x.getCantidad().subtract(sumaTotal));
                            }
                            detaDto.setDocumentoCompraDetaDto(x);
                            //Agregamos por default toda la cantidad movida al almacen ubicacion por default
                            AlmacenUbicacionDto auDefault = null;
                            for (AlmacenUbicacionDto au : dto.getAlmacenDestinoDto().getListaAlmacenUbicacion()) {
                                if (au.getPrincipal()) {
                                    auDefault = au;
                                }
                            }
                            if (auDefault != null) {
                                GrDetaItemDto gr = new GrDetaItemDto();
                                gr.setGuiaRemisionDetaDto(detaDto);
                                gr.setAlmacenUbicacionDestinoDto(auDefault);
                                gr.setCantidadMovida(detaDto.getCantidadMovida());
                                detaDto.setListaDetalles(new ArrayList<GrDetaItemDto>());
                                detaDto.getListaDetalles().add(gr);
                            }
                            dto.getListaDetalles().add(detaDto);
                        }
                    }
                }
            } else {
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.27"));
            }
        } catch (DAOException ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());
        }
        return resultado;
    }

    public Boolean seleccionaDocumentoVenta(GuiaRemisionDto dto, DocumentoVentaDto dtoDV) {
        Boolean resultado = false;
        try {
            for (DocumentoVentaDetaDto x : dtoDV.getListaDetalles()) {
                if (x.getProductoDetaDto().getProductoDto().getAlmacenado()) {
                    resultado = true;
                }
            }
            if (resultado) {
                SessionMBean sessionMBean = (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
                GuiaRemisionDetaManager guiaRemisionDetaManager = (GuiaRemisionDetaManager) WebServletContextListener.getApplicationContext().getBean("guiaRemisionDetaManager");
                DocumentoVentaDetaManager documentoVentaDetaManager = (DocumentoVentaDetaManager) WebServletContextListener.getApplicationContext().getBean("documentoVentaDetaManager");
                ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
                //Asignamos algunos valores del Documento de Venta a la Guia de Remision
                dto.setMotivoDto(parametroManager.obtenerPorId(idParametroDV));
                dto.setProviene(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_DV);
                dto.setOrigenTexto(UtilCore.Internacionalizacion.getMensajeInternacional("key.entidad.documento.venta") + " - " + dtoDV.getId() + " - " + dtoDV.getClienteDto().getDescripcion());
                dto.setAlmacenOrigenDto(obtenerAlmacenPorDefault());
                dto.setDireccionAlmacenOrigen(dto.getAlmacenOrigenDto().getDireccion());
                dto.setRucDestinatario(dtoDV.getClienteDto().getNumeroDocumento().toString());
                dto.setRazonSocialDestinatario(dtoDV.getClienteDto().getDescripcion());
                dto.setDireccionDestinatario(dto.getAlmacenOrigenDto().getDireccion());
                dto.setRucRemitente(sessionMBean.getOrganizacionDto().getRuc());
                dto.setRazonSocialRemitente(sessionMBean.getOrganizacionDto().getNombre());
                dto.setDireccionRemitente(sessionMBean.getOrganizacionDto().getDireccion());
                dto.setDocumentoVentaDto(dtoDV);
                //Creamos los items de la Guia de Remision
                dto.setListaDetalles(new ArrayList<GuiaRemisionDetaDto>());
                GuiaRemisionDetaDto detaDto = null;
                List<GuiaRemisionDetaDto> lst = null;
                BigDecimal sumaTotal = BigDecimal.ZERO;
                int cont = 0;
                for (DocumentoVentaDetaDto x : dtoDV.getListaDetalles()) {
                    if (!x.getProductoDetaDto().getProductoDto().getTipoProducto().equals(ConstantesConf.ValoresConstantes.PRODUCTO_COD_TIPO_SERVICIO)) {
                        x = documentoVentaDetaManager.obtenerPorId(x.getId());
                        if (!x.getEstado().equals(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_ENTREGADO)) {
                            cont++;
                            detaDto = new GuiaRemisionDetaDto();
                            detaDto.setGuiaRemisionDto(dto);
                            detaDto.setItem(cont);
                            detaDto.setProductoDetaDto(x.getProductoDetaDto());
                            detaDto.setUnidadMedidaDto(x.getUnidadMedidaDto());
                            if (x.getEstado().equals(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_POR_ENTREGAR)) {
                                detaDto.setCantidadMovida(x.getCantidad());
                            } else {
                                lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(x);
                                sumaTotal = sumarCantidadDetalles(lst);
                                detaDto.setCantidadMovida(x.getCantidad().subtract(sumaTotal));
                            }
                            detaDto.setDocumentoVentaDetaDto(x);
                            //Agregamos por default toda la cantidad movida al almacen ubicacion por default
                            AlmacenUbicacionDto auDefault = null;
                            for (AlmacenUbicacionDto au : dto.getAlmacenOrigenDto().getListaAlmacenUbicacion()) {
                                if (au.getPrincipal()) {
                                    auDefault = au;
                                }
                            }
                            if (auDefault != null) {
                                GrDetaItemDto gr = new GrDetaItemDto();
                                gr.setGuiaRemisionDetaDto(detaDto);
                                gr.setAlmacenUbicacionOrigenDto(auDefault);
                                gr.setCantidadMovida(detaDto.getCantidadMovida());
                                detaDto.setListaDetalles(new ArrayList<GrDetaItemDto>());
                                detaDto.getListaDetalles().add(gr);
                            }
                            dto.getListaDetalles().add(detaDto);
                        }
                    }
                }
            } else {
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.28"));
            }
        } catch (DAOException ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());
        }
        return resultado;
    }

    public GuiaRemisionDto cargarFormManual(GuiaRemisionDto dto) {
        if (!dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA)) {
            dto.setProviene(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA);
            dto.setOrigenTexto("");
            dto.setPedidoCompraDto(null);
            dto.setPedidoVentaDto(null);
            dto.setDocumentoCompraDto(null);
            dto.setDocumentoVentaDto(null);
            if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_ING) {
                dto.setRazonSocialRemitente("");
                dto.setRucRemitente("");
                dto.setDireccionRemitente("");
            } else if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL) {
                dto.setRazonSocialDestinatario("");
                dto.setRucDestinatario("");
                dto.setDireccionDestinatario("");
            }
            dto.setListaDetalles(new ArrayList<GuiaRemisionDetaDto>());
        }
        return dto;
    }

    private AlmacenDto obtenerAlmacenPorDefault() {
        AlmacenDto almDto = null;
        try {
            AlmacenManager almacenManager = (AlmacenManager) WebServletContextListener.getApplicationContext().getBean("almacenManager");
            List<AlmacenDto> listaAlmacenes = almacenManager.obtenerAlmacenesActivosPorOrganizacion();
            almDto = listaAlmacenes.get(0);
        } catch (DAOException ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());

        }
        return almDto;
    }

    public Boolean verificarEliminarDetalle(GuiaRemisionDto dto) {
        if (!dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA)) {
            if (dto.getListaDetalles().size() == 1) {
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.14"));
                return false;
            }
        }
        return true;
    }

    public Boolean verificarAlmacenUbicacionPorDetalle(GuiaRemisionDto dto, GuiaRemisionDetaDto detaDto) {
        Boolean resultado = true;
        if (detaDto.getListaDetalles() == null) {
            resultado = false;
            recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.2"));
        } else {
            if (detaDto.getListaDetalles().isEmpty()) {
                resultado = false;
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.2"));
            }
        }
        //Si al menos se ha agregado un GrDetaItem verificamos que se haya indicado en que almacen 
        //ubicacion ira toda la cantidad movida del detalle
        if (resultado) {
            BigDecimal cantidadTotal = BigDecimal.ZERO;
            for (GrDetaItemDto x : detaDto.getListaDetalles()) {
                cantidadTotal = cantidadTotal.add(x.getCantidadMovida());
            }
            if (detaDto.getCantidadMovida().compareTo(cantidadTotal) > 0 || cantidadTotal.compareTo(detaDto.getCantidadMovida()) > 0) {
                resultado = false;
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.12"));
            }
        }
        return resultado;
    }

    public Boolean validarCantidadAtendida(GuiaRemisionDto dto, GuiaRemisionDetaDto detaDto) {
        GuiaRemisionDetaManager guiaRemisionDetaManager = (GuiaRemisionDetaManager) WebServletContextListener.getApplicationContext().getBean("guiaRemisionDetaManager");
        Boolean resultado = true;
        List<GuiaRemisionDetaDto> lst = null;
        BigDecimal sumaParcial = BigDecimal.ZERO;
        try {
            if (!dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_MA)) {
                if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_PC)) {
                    if (detaDto.getPedidoCompraDetaDto().getEstado().equals(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_REC_PARCIAL)) {
                        lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(detaDto.getPedidoCompraDetaDto());
                        sumaParcial = sumarCantidadDetalles(lst);
                        sumaParcial = detaDto.getPedidoCompraDetaDto().getCantidad().subtract(sumaParcial);
                    } else if (detaDto.getPedidoCompraDetaDto().getEstado().equals(ConstantesComp.ValoresConstantes.PEDIDO_COMPRA_DETA_COD_ESTADO_EN_ESPERA)) {
                        sumaParcial = detaDto.getPedidoCompraDetaDto().getCantidad();
                    }
                    if (detaDto.getCantidadMovida().compareTo(sumaParcial) > 0) {
                        recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.15"));
                    }
                } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_PV)) {
                    if (detaDto.getPedidoVentaDetaDto().getEstado().equals(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_ENT_PARCIAL)) {
                        lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(detaDto.getPedidoVentaDetaDto());
                        sumaParcial = sumarCantidadDetalles(lst);
                        sumaParcial = detaDto.getPedidoVentaDetaDto().getCantidad().subtract(sumaParcial);
                    } else if (detaDto.getPedidoVentaDetaDto().getEstado().equals(ConstantesCome.ValoresConstantes.PEDIDO_VENTA_DETA_COD_ESTADO_POR_ENTREGAR)) {
                        sumaParcial = detaDto.getPedidoVentaDetaDto().getCantidad();
                    }
                    if (detaDto.getCantidadMovida().compareTo(sumaParcial) > 0) {
                        resultado = false;
                        recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.16"));
                    }
                } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_DC)) {
                    if (detaDto.getDocumentoCompraDetaDto().getEstado().equals(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_REC_PARCIAL)) {
                        //Revisar aqui!!!!
                        lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(detaDto.getDocumentoCompraDetaDto());
                        sumaParcial = sumarCantidadDetalles(lst);
                        sumaParcial = detaDto.getDocumentoCompraDetaDto().getCantidad().subtract(sumaParcial);
                    } else if (detaDto.getDocumentoCompraDetaDto().getEstado().equals(ConstantesComp.ValoresConstantes.DOC_COMPRA_DETA_COD_ESTADO_EN_ESPERA)) {
                        sumaParcial = detaDto.getDocumentoCompraDetaDto().getCantidad();
                    }
                    if (detaDto.getCantidadMovida().compareTo(sumaParcial) > 0) {
                        recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.17"));
                    }
                } else if (dto.getProviene().equals(ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_PROVIENE_DV)) {
                    if (detaDto.getDocumentoVentaDetaDto().getEstado().equals(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_ENT_PARCIAL)) {
                        lst = guiaRemisionDetaManager.obtenerPorDetalleOrigen(detaDto.getDocumentoVentaDetaDto());
                        sumaParcial = sumarCantidadDetalles(lst);
                        sumaParcial = detaDto.getDocumentoVentaDetaDto().getCantidad().subtract(sumaParcial);
                    } else if (detaDto.getDocumentoVentaDetaDto().getEstado().equals(ConstantesCome.ValoresConstantes.DOC_VENTA_DETA_COD_ESTADO_POR_ENTREGAR)) {
                        sumaParcial = detaDto.getDocumentoVentaDetaDto().getCantidad();
                    }
                    if (detaDto.getCantidadMovida().compareTo(sumaParcial) > 0) {
                        resultado = false;
                        recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.18"));
                    }
                }
            }
        } catch (DAOException ex) {
            recursosManager.showError(ex.getMessage());
            logger.error(ex.getMessage());

        }
        return resultado;
    }

    public void editarGrDetaItem(GuiaRemisionDto dto, GuiaRemisionDetaDto detaDto, int contIndex) {
        GrDetaItemDto grDetaItemDto = detaDto.getListaDetalles().get(contIndex);
        if (grDetaItemDto.getCantidadMovida() != null) {
            if (validarSumaCantidadesAlmUbicacionEditar(dto, detaDto, grDetaItemDto, contIndex)) {
                if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL || dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV) {
                    verificarStock(detaDto, grDetaItemDto);
                }
            }
        } else {
            recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.19"));
        }
    }

    public void agregarGrDetaItem(GuiaRemisionDto dto, GuiaRemisionDetaDto detaDto, GrDetaItemDto grDetaDto) {
        if (detaDto.getProductoDetaDto() != null) {
            if (detaDto.getCantidadMovida() != null) {
                Boolean indicador = true;
                if (detaDto.getListaDetalles() == null) {
                    detaDto.setListaDetalles(new ArrayList<GrDetaItemDto>());
                }
                if (verificarUniqueAlmacenUbicacionPorDetalle(dto, detaDto, grDetaDto)) {
                    if (validarSumaCantidadesAlmUbicacionNuevo(dto, detaDto, grDetaDto)) {
                        if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL || dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV) {
                            indicador = verificarStock(detaDto, grDetaDto);
                        }
                    } else {
                        indicador = false;
                    }

                    if (indicador) {
                        System.out.println("CANTIDAD x --> " + grDetaDto.getCantidadMovida());
                        grDetaDto.setGuiaRemisionDetaDto(detaDto);
                        detaDto.getListaDetalles().add(grDetaDto);
                    }
                }
            } else {
                recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.7"));
            }
        } else {
            recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.6"));
        }
    }

    public Boolean verificarUniqueAlmacenUbicacionPorDetalle(GuiaRemisionDto dto, GuiaRemisionDetaDto detaDto, GrDetaItemDto grDetaDto) {
        Boolean resultado = true;
        if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_ING) {
            for (GrDetaItemDto x : detaDto.getListaDetalles()) {
                if (x.getAlmacenUbicacionDestinoDto().equals(grDetaDto.getAlmacenUbicacionDestinoDto())) {
                    resultado = false;
                    recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.4"));
                }
            }
        } else if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_SAL) {
            for (GrDetaItemDto x : detaDto.getListaDetalles()) {
                if (x.getAlmacenUbicacionOrigenDto().equals(grDetaDto.getAlmacenUbicacionOrigenDto())) {
                    resultado = false;
                    recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.4"));
                }
            }
        } else if (dto.getTipo() == ConstantesInve.ValoresConstantes.GUIA_REMISION_COD_TIPO_MOV) {
            for (GrDetaItemDto x : detaDto.getListaDetalles()) {
                if (x.getAlmacenUbicacionOrigenDto().equals(grDetaDto.getAlmacenUbicacionOrigenDto()) && x.getAlmacenUbicacionDestinoDto().equals(grDetaDto.getAlmacenUbicacionDestinoDto())) {
                    resultado = false;
                    recursosManager.showError(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.13"));
                }
            }
        }
        return resultado;
    }

    public Boolean validarSumaCantidadesAlmUbicacionEditar(GuiaRemisionDto dto, GuiaRemisionDetaDto detaDto, GrDetaItemDto grDetaDto, int contIndex) {
        Boolean resultado = true;
        BigDecimal cantidadTotal = BigDecimal.ZERO;
        if (detaDto.getListaDetalles() != null) {
            if (!detaDto.getListaDetalles().isEmpty()) {
                int cont = 0;
                for (GrDetaItemDto x : detaDto.getListaDetalles()) {
                    if (cont != contIndex) {
                        cantidadTotal = cantidadTotal.add(x.getCantidadMovida());
                    }
                    cont++;
                }
            }
        }
        cantidadTotal = cantidadTotal.add(grDetaDto.getCantidadMovida());
        if (cantidadTotal.compareTo(detaDto.getCantidadMovida()) > 0) {
            resultado = false;
            recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.1"));
        }
        return resultado;
    }

    public Boolean validarSumaCantidadesAlmUbicacionNuevo(GuiaRemisionDto dto, GuiaRemisionDetaDto detaDto, GrDetaItemDto grDetaDto) {
        Boolean resultado = true;
        BigDecimal cantidadTotal = BigDecimal.ZERO;
        if (detaDto.getListaDetalles() != null) {
            if (!detaDto.getListaDetalles().isEmpty()) {
                for (GrDetaItemDto x : detaDto.getListaDetalles()) {
                    cantidadTotal = cantidadTotal.add(x.getCantidadMovida());
                }
            }
        }
        cantidadTotal = cantidadTotal.add(grDetaDto.getCantidadMovida());

        if (cantidadTotal.compareTo(detaDto.getCantidadMovida()) > 0) {
            resultado = false;
            recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.mensaje.1"));
        }
        return resultado;
    }

    public String imprimirDto(GuiaRemisionDto dto) {
        try {
            String nombreArchivoReporte = "GUIA_REMISION_" + dto.getId();
            HashMap parametros = new HashMap();
            parametros.put("P_IDENTIFICADOR", dto.getId());
            recursosManager.viewReportePdf(parametros, "JGuiaRemision", nombreArchivoReporte);
            return null;
        } catch (FileNotFoundException ex) {
            recursosManager.showError("EL ARCHIVO NO SE ENCUENTRA");
            logger.error(ex);
        } catch (JRException ex) {
            logger.error(ex);
            recursosManager.showError("ERROR EN LA COMPILACIÓN DEL REPORTE");
        } catch (IOException ex) {
            recursosManager.showError("EL ARCHIVO ESTÁ DAÑADO");
            logger.error(ex);
        } catch (SQLException ex) {
            logger.error(ex);
            recursosManager.showError("ERROR EN LA CONSULTA DEL REPORTE");
        } finally {
            return null;
        }
    }

    public String imprimirMovimientoDto(GuiaRemisionDto dto) {
        try {
            String nombreArchivoReporte = "MOVIMIENTO_PRODUCTOS_" + dto.getId();
            HashMap parametros = new HashMap();
            parametros.put("P_IDENTIFICADOR", dto.getId());
            recursosManager.viewReportePdf(parametros, "JMovimientos", nombreArchivoReporte);
            return null;
        } catch (FileNotFoundException ex) {
            recursosManager.showError("EL ARCHIVO NO SE ENCUENTRA");
            logger.error(ex);
        } catch (JRException ex) {
            logger.error(ex);
            recursosManager.showError("ERROR EN LA COMPILACIÓN DEL REPORTE");
        } catch (IOException ex) {
            recursosManager.showError("EL ARCHIVO ESTÁ DAÑADO");
            logger.error(ex);
        } catch (SQLException ex) {
            logger.error(ex);
            recursosManager.showError("ERROR EN LA CONSULTA DEL REPORTE");
        } finally {
            return null;
        }
    }

    public void generarExcelSeleccionados(ExportarExcelInve.GuiaRemision exp, GuiaRemisionDto[] selectedGRs) {
        StringBuilder strCabecera = this.obtenerCabeceraExcel(exp);
        List<GuiaRemisionDto> lst = Arrays.asList(selectedGRs);
        List lstCuerpo = this.obtenerCuerpoExcel(exp, lst);
        String nombreArchivo = "GUIA_REMISION_" + UtilCore.Fecha.obtenerFechaHoraActual().replace(':', '_') + ".xls";
        this.recursosManager.generarExcel(strCabecera.toString(), lstCuerpo, nombreArchivo);
        this.recursosManager.viewArchivo(nombreArchivo);
    }

    public void generarExcelPorTabla(ExportarExcelInve.GuiaRemision exp, List<GuiaRemisionDto> lstGR) {
        StringBuilder strCabecera = this.obtenerCabeceraExcel(exp);
        List lstCuerpo = this.obtenerCuerpoExcel(exp, lstGR);
        String nombreArchivo = "GUIA_REMISION_" + UtilCore.Fecha.obtenerFechaHoraActual().replace(':', '_') + ".xls";
        this.recursosManager.generarExcel(strCabecera.toString(), lstCuerpo, nombreArchivo);
        this.recursosManager.viewArchivo(nombreArchivo);
    }

    private List obtenerCuerpoExcel(ExportarExcelInve.GuiaRemision exp, List<GuiaRemisionDto> lst) {
        StringBuilder strCuerpo;
        List lstFilas = new ArrayList();
        for (GuiaRemisionDto x : lst) {
            strCuerpo = new StringBuilder();
            if (exp.getId()) {
                strCuerpo.append(x.getId()).append("|");
            }
            if (exp.getEmpresa()) {
                strCuerpo.append(x.getEmpresaDto().getDescripcion()).append("|");
            }
            if (exp.getOrganizacion()) {
                strCuerpo.append(x.getOrganizacionDto().getNombre()).append("|");
            }
            if (exp.getTipo()) {
                strCuerpo.append(x.getTipoTexto()).append("|");
            }
            if (exp.getNroSerie()) {
                strCuerpo.append(x.getNroSerie()).append("|");
            }
            if (exp.getRucTransportista()) {
                strCuerpo.append(x.getRucTransportista()).append("|");
            }
            if (exp.getRazonSocialTransportista()) {
                strCuerpo.append(x.getRazonSocialTransportista()).append("|");
            }
            if (exp.getDireccionTransportista()) {
                strCuerpo.append(x.getDireccionTransportista()).append("|");
            }
            if (exp.getMarcaTransporte()) {
                strCuerpo.append(x.getMarcaTransporte()).append("|");
            }
            if (exp.getModeloTransporte()) {
                strCuerpo.append(x.getModeloTransporte()).append("|");
            }
            if (exp.getPlacaTransporte()) {
                strCuerpo.append(x.getPlacaTransporte()).append("|");
            }
            if (exp.getLicenciaConductor()) {
                strCuerpo.append(x.getLicenciaConductor()).append("|");
            }
            if (exp.getInscripcionTransporte()) {
                strCuerpo.append(x.getInscripcionTransporte()).append("|");
            }
            if (exp.getNombreConductor()) {
                strCuerpo.append(x.getNombreConductor()).append("|");
            }
            if (exp.getDocumentoConductor()) {
                strCuerpo.append(x.getDocumentoConductor()).append("|");
            }
            if (exp.getFechaEmision()) {
                strCuerpo.append(x.getFechaEmision()).append("|");
            }
            if (exp.getFechaInicioTraslado()) {
                strCuerpo.append(x.getFechaInicioTraslado()).append("|");
            }
            if (exp.getFechaContable()) {
                strCuerpo.append(x.getFechaContable()).append("|");
            }
            if (exp.getNroReferencia()) {
                strCuerpo.append(x.getNroReferencia()).append("|");
            }
            if (exp.getDescripcion()) {
                strCuerpo.append(x.getDescripcion()).append("|");
            }
            if (exp.getPedidoCompra()) {
                strCuerpo.append(x.getPedidoCompraDto().getId()).append("|");
            }
            if (exp.getDocumentoCompra()) {
                strCuerpo.append(x.getDocumentoCompraDto().getDescripcion()).append("|");
            }
            if (exp.getPedidoVenta()) {
                strCuerpo.append(x.getPedidoVentaDto().getId()).append("|");
            }
            if (exp.getDocumentoVenta()) {
                strCuerpo.append(x.getDocumentoVentaDto().getDescripcion()).append("|");
            }
            if (exp.getAlmacenOrigen()) {
                strCuerpo.append(x.getAlmacenOrigenDto().getNombre()).append("|");
            }
            if (exp.getAlmacenDestino()) {
                strCuerpo.append(x.getAlmacenDestinoDto().getNombre()).append("|");
            }
            if (exp.getUsuarioCreacion()) {
                strCuerpo.append(x.getUsuarioCreacionDto().getDescripcion()).append("|");
            }
            if (exp.getFechaCreacion()) {
                strCuerpo.append(x.getFechaCreacion()).append("|");
            }
            if (exp.getTerminalCreacion()) {
                strCuerpo.append(x.getTerminalCreacion()).append("|");
            }
            if (exp.getUsuarioConfirmacion()) {
                strCuerpo.append(x.getUsuarioConfirmacionDto().getDescripcion()).append("|");
            }
            if (exp.getFechaConfirmacion()) {
                strCuerpo.append(x.getFechaConfirmacion()).append("|");
            }
            if (exp.getUsuarioAnulacion()) {
                strCuerpo.append(x.getUsuarioAnulacionDto().getDescripcion()).append("|");
            }
            if (exp.getFechaAnulacion()) {
                strCuerpo.append(x.getFechaAnulacion()).append("|");
            }
            if (exp.getEstado()) {
                strCuerpo.append(x.getEstadoTexto()).append("|");
            }
            if (exp.getProviene()) {
                strCuerpo.append(x.getProviene()).append("|");
            }
            if (exp.getRucRemitente()) {
                strCuerpo.append(x.getRucRemitente()).append("|");
            }
            if (exp.getRazonSocialRemitente()) {
                strCuerpo.append(x.getRazonSocialRemitente()).append("|");
            }
            if (exp.getDireccionRemitente()) {
                strCuerpo.append(x.getDireccionRemitente()).append("|");
            }
            if (exp.getRucDestinatario()) {
                strCuerpo.append(x.getRucDestinatario()).append("|");
            }
            if (exp.getRazonSocialDestinatario()) {
                strCuerpo.append(x.getRazonSocialDestinatario()).append("|");
            }
            if (exp.getDireccionDestinatario()) {
                strCuerpo.append(x.getDireccionDestinatario()).append("|");
            }
            if (exp.getDireccionAlmacenOrigen()) {
                strCuerpo.append(x.getDireccionAlmacenOrigen()).append("|");
            }
            if (exp.getDireccionAlmacenDestino()) {
                strCuerpo.append(x.getDireccionAlmacenDestino()).append("|");
            }
            lstFilas.add(strCuerpo.toString());
        }
        return lstFilas;
    }

    private StringBuilder obtenerCabeceraExcel(ExportarExcelInve.GuiaRemision exp) {
        StringBuilder strCabecera = new StringBuilder();
        if (exp.getId()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("general.label.id")).append("|");
        }
        if (exp.getEmpresa()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.empresa")).append("|");
        }
        if (exp.getOrganizacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.organizacion")).append("|");
        }
        if (exp.getTipo()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.tipo")).append("|");
        }
        if (exp.getNroSerie()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.nro.serie")).append("|");
        }
        if (exp.getRucTransportista()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.ruc.transportista")).append("|");
        }
        if (exp.getRazonSocialTransportista()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.razon.social.transportista")).append("|");
        }
        if (exp.getDireccionTransportista()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.direccion.transportista")).append("|");
        }
        if (exp.getMarcaTransporte()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.marca.transporte")).append("|");
        }
        if (exp.getModeloTransporte()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.modelo.transporte")).append("|");
        }
        if (exp.getPlacaTransporte()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.placa.transporte")).append("|");
        }
        if (exp.getLicenciaConductor()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.licencia.conductor")).append("|");
        }
        if (exp.getInscripcionTransporte()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.inscripcion.transporte")).append("|");
        }
        if (exp.getNombreConductor()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.nombre.conductor")).append("|");
        }
        if (exp.getDocumentoConductor()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.doc.conductor")).append("|");
        }
        if (exp.getFechaEmision()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.fecha.emision")).append("|");
        }
        if (exp.getFechaInicioTraslado()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.fecha_ini_traslado")).append("|");
        }
        if (exp.getFechaContable()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.fecha.contable")).append("|");
        }
        if (exp.getNroReferencia()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.nro.referencia")).append("|");
        }
        if (exp.getDescripcion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.descripcion")).append("|");
        }
        if (exp.getPedidoCompra()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.pedido.compra")).append("|");
        }

        if (exp.getDocumentoCompra()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.doc.compra")).append("|");
        }

        if (exp.getPedidoVenta()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.pedido.venta")).append("|");
        }

        if (exp.getDocumentoVenta()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.doc.venta")).append("|");
        }

        if (exp.getAlmacenOrigen()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.almacen.origen")).append("|");
        }

        if (exp.getAlmacenDestino()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.almacen.destino")).append("|");
        }

        if (exp.getUsuarioCreacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("general.label.usuario.creacion")).append("|");
        }

        if (exp.getFechaCreacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("general.label.fecha.creacion")).append("|");
        }

        if (exp.getTerminalCreacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("general.label.terminal.creacion")).append("|");
        }

        if (exp.getUsuarioConfirmacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.usuario.confirmacion")).append("|");
        }

        if (exp.getFechaConfirmacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.fecha.confirmacion")).append("|");
        }

        if (exp.getUsuarioAnulacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.usuario.anulacion")).append("|");
        }

        if (exp.getFechaAnulacion()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.fecha.anulacion")).append("|");
        }
        if (exp.getEstado()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.estado")).append("|");
        }
        if (exp.getProviene()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.proviene")).append("|");
        }
        if (exp.getRucRemitente()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.ruc.remitente")).append("|");
        }
        if (exp.getRazonSocialRemitente()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.razon.social.remitente")).append("|");
        }
        if (exp.getDireccionRemitente()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.direccion.remitente")).append("|");
        }
        if (exp.getRucDestinatario()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.ruc.destinatario")).append("|");
        }
        if (exp.getRazonSocialDestinatario()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.razon.social.destinatario")).append("|");
        }
        if (exp.getDireccionDestinatario()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.direccion.destinatario")).append("|");
        }
        if (exp.getDireccionAlmacenOrigen()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.direccion.almacen.origen")).append("|");
        }
        if (exp.getDireccionAlmacenDestino()) {
            strCabecera.append(UtilCore.Internacionalizacion.getMensajeInternacional("guia.remision.direccion.almacen.destino")).append("|");
        }
        return strCabecera;
    }

    public ExportarExcelInve.GuiaRemision onChangeChekExcel(Boolean flag) {
        return new ExportarExcelInve.GuiaRemision(flag);
    }

    public void nuevoMuchos(List<PedidoCompraDto> lista) throws DAOException {
        springHibernateDao.guardarColeccion(lista);
    }

    public void eliminarMuchos(List<PedidoCompraDto> lista) throws DAOException {
        springHibernateDao.borrarColeccion(lista);
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        GuiaRemisionManager.logger = logger;
    }

    public Long getIdEntidad() {
        return idEntidad;
    }

    public void setIdEntidad(Long idEntidad) {
        this.idEntidad = idEntidad;
    }

    public DAOGenerico<GuiaRemisionDto> getSpringHibernateDao() {
        return springHibernateDao;
    }

    public void setSpringHibernateDao(DAOGenerico<GuiaRemisionDto> springHibernateDao) {
        this.springHibernateDao = springHibernateDao;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public String getUrlIngreso() {
        return urlIngreso;
    }

    public String getUrlSalida() {
        return urlSalida;
    }

    public String getUrlLista() {
        return urlLista;
    }

    public String getUrlIntercambio() {
        return urlIntercambio;
    }

    public String getUrlListaIntercambio() {
        return urlListaIntercambio;
    }

    public Long getIdCatalogoMotivosSinOrigen() {
        return idCatalogoMotivosSinOrigen;
    }

    public Long getIdCatalogoMotivosConOrigen() {
        return idCatalogoMotivosConOrigen;
    }

    public Long getIdCatalogoMotivosTranfEntreAlm() {
        return idCatalogoMotivosTranfEntreAlm;
    }

    public void setIdCatalogoMotivosTranfEntreAlm(Long idCatalogoMotivosTranfEntreAlm) {
        this.idCatalogoMotivosTranfEntreAlm = idCatalogoMotivosTranfEntreAlm;
    }
}
